package collection.stream;

import java.sql.SQLOutput;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.stream.Collectors;

/**
 * JDK8之后，集合提供了流式操作
 * 集合提供了一个方法：stream（），可以将集合变为一个“流”，流中的内容就是集合中的每个元素
 * 我们可以在流中添加各种中间环节，每个中间环节都会将经过的元素进行相应的处理
 * 最后要在stream上添加终端环节，用于得到最终的处理结果
 * 步骤：集合转换为流 → 中间环节（加工处理）→ 终端环节（获取结果）
 */
public class StreamApiDemo {
    public static void main(String[] args) {
        Random r = new Random();
        List<Integer> list = new ArrayList<>();
        for (int i = 0; i < 10; i++) {
            list.add(r.nextInt(10));  //0到9的随机数
        }
        System.out.println("原始数据："+list);

        List<Integer>list2 = list.stream()  //将集合转为一个“流”
                            .map(e->e*3)    //添加map中间环节，将每个元素扩大3倍
                            .collect(Collectors.toList());  //终端环节，将流转为集合
        System.out.println("扩大3倍："+list2);

        List<Integer>list3 = list.stream().filter(e->e%2 == 0).collect(Collectors.toList());
        System.out.println("仅保留偶数："+list3);

        List<Integer>list4 = list.stream().distinct().collect(Collectors.toList());
        System.out.println("去重后："+list4);

        List<Integer>list5 = list.stream().sorted((e1,e2)->e2-e1).collect(Collectors.toList());
        System.out.println("降序后："+list5);

        //对集合每个元素扩大3倍并获取其中所有的偶数然后去除重复元素并降序排列
        List<Integer>list6 = list.stream()
                            .map(e->e*3)
                            .filter(e->e%2==0)
                            .distinct()
                            .sorted((e1,e2)->e2-e1)
                            .collect(Collectors.toList());
        System.out.println("上述所有功能："+list6);




    }
}
